package com.common.util;

import java.math.BigDecimal;
import java.text.DateFormat;
import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Set;
import java.util.StringTokenizer;

import com.common.exception.BusinessException;

public class StringUtil {
    private static DateFormat dformat = new SimpleDateFormat("yyyyMMdd");
    private static DateFormat dtf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss Z");
    private static NumberFormat nf = new DecimalFormat("#,##0.00");  
    private static DecimalFormat df = new DecimalFormat("0.00"); 
	/**
     * 判断对象是否为空
     * @param obj : 字符
     * @return
     */
    public static boolean isEmpty(String obj){
        if(obj == null || "".equals(obj.trim())||"null".equals(obj.trim().toLowerCase())){
        	return true;
        }
        return false;
    }
    
    /**
     * 判断对象是否为空
     * @param obj : 日期
     * @return
     */
	public static boolean isEmpty(Date obj) {
		if(null == obj){
			return true;
		}
		return false;
	}
	
	/**
     * 判断对象是否为空
     * @param obj : 长整型
     * @return
     */
	public static boolean isEmpty(Long obj) {
		return isEmpty(obj, false);
	}
	/**
	 * 判断对象是否为空，且不为0
	 * flag: true 则判断0   false 不判断0
	 * @param obj ：长整型
	 * @param flag
	 * @return
	 */
	public static boolean isEmpty(Long obj, boolean flag) {
		if(null == obj){
			return true;
		}
		if(flag){
			if(0 == obj.longValue()){
				return true;
			}
		}
		return false;
	}
    /**
     * 将日期转换为yyyyMMdd格式的字符串,若为Null,则返回空字符串
     * @param date
     * @return
     */
    public static String toDateSimpleString(Date date){
        if(date==null) return "";
        return dformat.format(date);
    }
    
    public static String toDateTimeString(Date date) {
        if (date==null) return "";
        return dtf.format(date);
    }
    
    private static Long parseLongString(String value) {
        if (value==null || value.equals("")) return null;
        return Long.valueOf(value);
    }
    
    private static Integer parseIntString(String value) {
        if (value==null || value.equals("")) return null;
        if (value.trim().equalsIgnoreCase("false")) return new Integer(0);
        if (value.trim().equalsIgnoreCase("true")) return new Integer(1);
        return Integer.valueOf(value);
    }
    
    private static Double parseDoubleString(String value) {
        if (value==null || value.equals("")) return null;
        try {
            
            return new Double(nf.parse(value).doubleValue());
        } catch (ParseException pe) {
            throw new BusinessException("将金额字符串转换出错",pe);
        }
    }
    /**
     * 格式化Double类型数据为：0.00格式
     * @param value
     * @return
     */
	public static String doubleFormat(Double value){
		if(null == value) value = new Double(0);
		return df.format(value);
	}
    /**
     * String型数据转换为Long型数据
     * 字符型数据可能存在','，转换时要做相应处理
     * @param value
     * @return
     */
    public static Long parseString2Long(String value) {
    	return parseLongString(parseComStr2SmpStr(value));
    }
    
    /**
     * String ---> Intger
     * @param value
     * @return
     */
    public static Integer parseString2Integer(String value) {
    	return parseIntString(parseComStr2SmpStr(value));
    }
    
    /**
     * String --> Double
     * @param value
     * @return
     */
    public static Double parseString2Double(String value) {
    	return parseDoubleString(parseComStr2SmpStr(value));
    }	
    
    /**
     * 去除String型数据中含有的','
     * @param value
     * @return
     */
    public static String parseComStr2SmpStr(String value) {
    	if(value == null) {
    		return null;
    	}
    	StringTokenizer st = new StringTokenizer(value, ",");
    	String str = "";
    	while(st.hasMoreTokens()) {
    		str += st.nextToken();
    	}
    	return str;
    }
    
    /**
     * 将double转换成金额的显示
     * @param value
     * @return
     */
    public static String formatDoubleToMoney(Double value) {
        if (value==null) return "0.00";
        return nf.format(new BigDecimal(value.doubleValue()));
    }
    
    public static String formatBigDecimal2Money(BigDecimal dec) {
    	if(dec == null) {
    		return "0.00";
    	}
    	return nf.format(dec);
    }
        
	/**
     * 判断对象是否为空
     * @param obj : 整型
     * @return
     */
	public static boolean isEmpty(Integer obj) {
		return isEmpty(obj, false);
	}
	
	/**
	 * 判断对象是否为空，且不为0
	 * flag: true 则判断0   false 不判断0
	 * @param obj : 整型
	 * @param flag
	 * @return
	 */
	public static boolean isEmpty(Integer obj, boolean flag) {
		if(null == obj){
			return true;
		}
		if(flag){
			if(0 == obj.intValue()){
				return true;
			}
		}
		return false;
	}
	
	/**
     * 判断对象是否为空
     * @param obj : 浮点型
     * @return
     */
	public static boolean isEmpty(Double obj) {
		return isEmpty(obj, false);
	}
	
	/**
	 * 判断对象是否为空，且不为0
	 * flag: true 则判断0   false 不判断0
	 * @param obj : 浮点型
	 * @param flag
	 * @return
	 */
	public static boolean isEmpty(Double obj, boolean flag) {
		if(null == obj){
			return true;
		}
		if(flag){
			if(0 == obj.doubleValue()){
				return true;
			}
		}
		return false;
	}
	
	/**
     * 判断对象是否为空
     * @param obj : List
     * @return
     */
	@SuppressWarnings("unchecked")
	public static boolean isEmpty(List obj)	{
		if(null == obj || obj.size() == 0){
			return true;
		}
		return false;
	}
	/**
     * 判断对象是否为空
     * @param obj : List
     * @return
     */
	@SuppressWarnings("unchecked")
	public static boolean isEmpty(Set obj)	{
		if(null == obj || obj.size() == 0){
			return true;
		}
		return false;
	}
	/**
     * 判断对象是否为空
     * @param obj : Object
     * @return
     */
	public static boolean isEmpty(Object obj){
		if(null == obj){
			return true;
		}
		return false;
	}
	/**
     * 判断列表对象是否存在类似字符串
     * @param list : List<String>
     * @return
     */
	public static boolean compareContent(List<String> compareData,String str){
		
		if(isEmpty(compareData)||isEmpty(str)){
			return false;
		}else{
			for(String data:compareData){
				if(str.indexOf(data)>-1){
					return true;
				}
			}
			return false;
		}
	}
	
	/**
	 * 判断字符串是否是整数格式
	 * @param value
	 * @return
	 */
	public static boolean isInteger(String value) {  
	     try {  
	         Integer.parseInt(value);  
	         return true;  
	     } catch (NumberFormatException e) {  
	         return false;  
	     }  
	 }  
}
